package br.ufc.apsoo.repositories;

import java.io.Serializable;
import java.util.List;

import javax.persistence.EntityManager;

import org.hibernate.Session;

import br.com.caelum.vraptor.ioc.Component;
import br.ufc.apsoo.models.Apartamento;
import br.ufc.apsoo.models.Despesa;

@Component
public class DespesaRepositoryImpl extends Repository<Despesa, Serializable>
		implements TodasDespesas {

	private final Session session;

	protected DespesaRepositoryImpl(EntityManager entityManager) {
		super(entityManager);
		session = (Session) entityManager.getDelegate();
	}

	@Override
	public List<Despesa> doApartamento(Apartamento apartamento) {
		StringBuilder hqlBuilder = new StringBuilder();

		hqlBuilder.append("select d ");
		hqlBuilder.append("from   br.ufc.apsoo.models.Despesa d ");
		hqlBuilder.append("where  d.reserva.apartamento.numero = :numero ");
		hqlBuilder.append("and	  d.estornada = :false ");
		hqlBuilder.append("order by	  d.data ");

		return entityManager.createQuery(hqlBuilder.toString())
				.setParameter("numero", apartamento.getNumero())
				.setParameter("false", new Boolean(false)).getResultList();
	}

	@Override
	public void estornar(Despesa despesa) {
		despesa = this.find(despesa.getId());
		despesa.setEstornada(true);
		this.update(despesa);

	}

	@Override
	public void lancar(Despesa despesa) {
		this.create(despesa);
	}

}
